# app/utils/image_utils.py
import os
from PIL import Image


def compress_image(image_path, max_size=(1200, 1200), quality=75):
    """
    自动压缩图片：
    - 限制最大宽高 max_size
    - 降低 JPEG 质量为 80
    - PNG 依旧用 PNG 保存（可选转换）
    """
    if not os.path.exists(image_path):
        return

    try:
        img = Image.open(image_path)
    except Exception:
        # 不是图片或损坏，直接略过
        return

    # 原始尺寸
    orig_width, orig_height = img.size
    max_w, max_h = max_size

    # 只处理大于 max_size 的图片
    if orig_width > max_w or orig_height > max_h:
        img.thumbnail(max_size, Image.Resampling.LANCZOS)

    # 统一 RGB（JPEG 不支持透明）
    if img.mode in ("RGBA", "P"):
        img = img.convert("RGB")

    # 根据扩展名决定保存格式
    ext = os.path.splitext(image_path)[1].lower()
    if ext in ['.jpg', '.jpeg']:
        img.save(image_path, format='JPEG', optimize=True, quality=quality)
    elif ext in ['.png']:
        # PNG：用较高压缩比
        img.save(image_path, format='PNG', optimize=True)
    else:
        # 其它格式都当 jpeg 处理一份（你也可以保留原格式，这里只是示例）
        new_path = os.path.splitext(image_path)[0] + '.jpg'
        img.save(new_path, format='JPEG', optimize=True, quality=quality)
        # 如果你愿意，可以删掉原文件
        # os.remove(image_path)
